// 天气查询功能主文件

import axios from 'axios'  //导入axios库进行HTTP请求
import chalk from 'chalk'  //导入chalik库进行美化

import config from '../config/index.js'  //导入基础配置（API、单位）


//查询城市实时天气:city 城市名（如“北京”）
export function queryWeather(city) {
    // 校验API密钥 ①
    if (!config.amap.key) {
        console.log(chalk.red('[错误]：请配置高德API'))
        return
    }

    // 发起请求并处理
    axios.get(config.amap.weatherUrl, {
        params: {
            city,
            key: config.amap.key,
            //高德API设计参数：指定查询类型（'base' 表示获取实时天气，'all' 表示获取预报天气）
            extensions: 'base'
        },
        timeout: 10000
    })
        //②
        .then(({ data: result }) => {
            if (result.status !== '1') {
                console.log(chalk.red(`[错误]：查询失败: ${result.info}`))
                return
            }
            if (result.lives === undefined || result.lives.length === 0) {
                console.log(chalk.yellow('[错误]：未找到城市天气信息'))
                return
            }
            displayWeather(result.lives[0])
        })
        .catch((error) => {
            console.log(error)
        })
}


//格式化显示天气信息：weatherData 天气数据对象
function displayWeather(weatherData) {
    console.log(chalk.cyan(`\n ${weatherData.city} 实时天气`))
    console.log(chalk.gray('--------------------------------'))

    console.log(`${chalk.bold('温度:')} ${weatherData.temperature}${config.units.celsius}`)
    console.log(`${chalk.bold('天气:')} ${weatherData.weather}`)
    console.log(`${chalk.bold('湿度:')} ${weatherData.humidity}%`)
    console.log(`${chalk.bold('风向:')} ${weatherData.winddirection} ${weatherData.windpower}级`)
    console.log(`${chalk.bold('更新时间:')} ${weatherData.reporttime}`)

    console.log(chalk.gray('--------------------------------\n'))
}

/* 知识点汇总：
        ① 12行 => config.amap.key
                通过 “对象链式访问” 获取某个具体配置值 >
                    config：顶层配置对象; amap: index.js 里面配置的高德API第三方配置对象名; key：amap里的一个属性

        ② 27行 => { data: result }
                从axios回调接收的响应对象中结构出data，并且重命名为 result
*/